home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / plan / src / notmenu.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  5KB  |  162 lines

  1. /*
  2.  * Create the notifier window and everything in it. Only the Dismiss button
  3.  * has a callback, which terminates everything. The <msg> argument points
  4.  * to the text to fill the scrollable text window with; it is read-only.
  5.  */
  6.  
  7. #include <Xm/Xm.h>
  8. #include <Xm/MainW.h>
  9. #include <Xm/Form.h>
  10. #include <Xm/LabelP.h>
  11. #include <Xm/PushBP.h>
  12. #include <Xm/PushBG.h>
  13. #include <Xm/Text.h>
  14. #include "notifier.h"
  15.  
  16. #define SNOOZE_PERIOD    5*60*1000    /* snooze time in milliseconds */
  17.  
  18. extern void exit();
  19. static void snooze_callback();
  20.  
  21. extern Display        *display;    /* everybody uses the same server */
  22. extern XtAppContext    app;        /* application handle for timer */
  23. extern GC        gc;        /* everybody uses this context */
  24. extern Pixel        color[NCOLS];    /* colors: COL_* */
  25. extern Pixel        bkcolor;    /* background color (COL_*) */
  26. static Widget        mainwindow;    /* for popdown/popup by snooze */
  27. static XtIntervalId    timer_id;    /* identifies snooze timer */
  28.  
  29.  
  30. create_widgets(toplevel, title, msg)
  31.     Widget            toplevel;
  32.     char            *title;        /* title string */
  33.     char            *msg;        /* message text */
  34. {
  35.     Widget            form, w, snooze;
  36.     XmString        string;
  37.     Arg            args[15];
  38.     int            n;
  39.     int            nlines=0, nchars=0;
  40.     char            *p;
  41.  
  42.     for (n=0, p=msg; *p; p++)        /* count x/y size of text */
  43.         if (*p != '\n')
  44.             n++;
  45.         else {
  46.             nlines++;
  47.             if (n > nchars)
  48.                 nchars = n;
  49.             n = 0;
  50.         }
  51.     if (n) {
  52.         nlines++;
  53.         if (n > nchars)
  54.             nchars = n;
  55.     }
  56.     if (nchars > 80)
  57.         nchars = 80;
  58.     if (nlines > 20)
  59.         nlines = 20;
  60.  
  61.     mainwindow = XtCreateManagedWidget("mainwindow",
  62.             xmMainWindowWidgetClass, toplevel, NULL, 0);
  63.     n = 0;
  64.     XtSetArg(args[n], XmNbackground,    color[bkcolor]);    n++;
  65.     form = XtCreateWidget("form", xmFormWidgetClass,
  66.             mainwindow, args, n);
  67.  
  68.     n = 0;                            /* title */
  69.     string = XmStringCreateSimple(title);
  70.     XtSetArg(args[n], XmNtopAttachment,    XmATTACH_FORM);        n++;
  71.     XtSetArg(args[n], XmNtopOffset,        12);            n++;
  72.     XtSetArg(args[n], XmNleftAttachment,    XmATTACH_FORM);        n++;
  73.     XtSetArg(args[n], XmNleftOffset,    8);            n++;
  74.     XtSetArg(args[n], XmNrightAttachment,    XmATTACH_FORM);        n++;
  75.     XtSetArg(args[n], XmNrightOffset,    8);            n++;
  76.     XtSetArg(args[n], XmNbackground,    color[bkcolor]);    n++;
  77.     XtSetArg(args[n], XmNlabelString,    string);        n++;
  78.     w = XtCreateManagedWidget("title", xmLabelWidgetClass,
  79.             form, args, n);
  80.     XmStringFree(string);
  81.  
  82.     n = 0;                            /* message */
  83.     XtSetArg(args[n], XmNtopAttachment,    XmATTACH_WIDGET);    n++;
  84.     XtSetArg(args[n], XmNtopWidget,        w);            n++;
  85.     XtSetArg(args[n], XmNtopOffset,        12);            n++;
  86.     XtSetArg(args[n], XmNleftAttachment,    XmATTACH_FORM);        n++;
  87.     XtSetArg(args[n], XmNleftOffset,    12);            n++;
  88.     XtSetArg(args[n], XmNrightAttachment,    XmATTACH_FORM);        n++;
  89.     XtSetArg(args[n], XmNrightOffset,    12);            n++;
  90.     XtSetArg(args[n], XmNrows,        nlines);        n++;
  91.     XtSetArg(args[n], XmNcolumns,        nchars+1);        n++;
  92.     XtSetArg(args[n], XmNbackground,    color[bkcolor]);    n++;
  93.     XtSetArg(args[n], XmNhighlightThickness,0);            n++;
  94.     XtSetArg(args[n], XmNeditable,        False);            n++;
  95.     XtSetArg(args[n], XmNeditMode,        XmMULTI_LINE_EDIT);    n++;
  96.     XtSetArg(args[n], XmNvalue,        msg);            n++;
  97.     if (nlines) {
  98.         w = XmCreateScrolledText(form, "message", args, n);
  99.         XtManageChild(w);
  100.     }
  101.  
  102.     n = 0;                            /* snooze */
  103.     XtSetArg(args[n], XmNtopAttachment,    XmATTACH_WIDGET);    n++;
  104.     XtSetArg(args[n], XmNtopWidget,        w);            n++;
  105.     XtSetArg(args[n], XmNtopOffset,        16);            n++;
  106.     XtSetArg(args[n], XmNbottomAttachment,    XmATTACH_FORM);        n++;
  107.     XtSetArg(args[n], XmNbottomOffset,    12);            n++;
  108.     XtSetArg(args[n], XmNleftAttachment,    XmATTACH_FORM);        n++;
  109.     XtSetArg(args[n], XmNleftOffset,    12);            n++;
  110.     XtSetArg(args[n], XmNhighlightThickness,0);            n++;
  111.     XtSetArg(args[n], XmNbackground,    color[bkcolor]);    n++;
  112.     snooze = XtCreateManagedWidget("snooze 5 min", xmPushButtonWidgetClass,
  113.             form, args, n);
  114.     XtAddCallback(snooze, XmNactivateCallback, snooze_callback,
  115.                                 (XtPointer)0);
  116.  
  117.     n = 0;                            /* dismiss */
  118.     XtSetArg(args[n], XmNtopAttachment,    XmATTACH_WIDGET);    n++;
  119.     XtSetArg(args[n], XmNtopWidget,        w);            n++;
  120.     XtSetArg(args[n], XmNtopOffset,        16);            n++;
  121.     XtSetArg(args[n], XmNbottomAttachment,    XmATTACH_FORM);        n++;
  122.     XtSetArg(args[n], XmNbottomOffset,    12);            n++;
  123.     XtSetArg(args[n], XmNleftAttachment,    XmATTACH_WIDGET);    n++;
  124.     XtSetArg(args[n], XmNleftWidget,    snooze);        n++;
  125.     XtSetArg(args[n], XmNleftOffset,    8);            n++;
  126.     XtSetArg(args[n], XmNrightAttachment,    XmATTACH_FORM);        n++;
  127.     XtSetArg(args[n], XmNrightOffset,    12);            n++;
  128.     XtSetArg(args[n], XmNhighlightThickness,0);            n++;
  129.     XtSetArg(args[n], XmNbackground,    color[bkcolor]);    n++;
  130.     w = XtCreateManagedWidget("dismiss", xmPushButtonWidgetClass,
  131.             form, args, n);
  132.     XtAddCallback(w, XmNactivateCallback, exit, (XtPointer)0);
  133.  
  134.     XtManageChild(form);
  135. }
  136.  
  137.  
  138. /*
  139.  * snooze was pressed. Pop the window down for five minutes.
  140.  */
  141.  
  142. /*ARGSUSED*/
  143. static void timer_callback(data, id)
  144.     XtPointer        data;        /* not used */
  145.     XtIntervalId        *id;        /* not used */
  146. {
  147.     XtPopup(XtParent(mainwindow), XtGrabNone);
  148.     XBell(display, 0);
  149.     XBell(display, 0);
  150. }
  151.  
  152.  
  153. /*ARGSUSED*/
  154. static void snooze_callback(widget, item, data)
  155.     Widget                widget;
  156.     int                item;
  157.     XmToggleButtonCallbackStruct    *data;
  158. {
  159.     XtPopdown(XtParent(mainwindow));
  160.     timer_id = XtAppAddTimeOut(app, SNOOZE_PERIOD, timer_callback, 0);
  161. }
  162.